package com.dragon.mmochat.service;

import java.util.ArrayList;
import java.util.List;

import com.dragon.mmochat.MmochatConstant;
import com.dragon.mmochat.model.enumType.MmochatEquipAttributeType;
import com.dragon.mmochat.model.enumType.MmochatSuperMachineType;
import com.dragon.mmochat.model.object.MmochatSuperMachine;
import com.dragon.mmochat.util.MmochatUtil;

//武魂系统
public class MmochatPkMachineService {	

	// 当前等级V，升级经验为expNeed[V]
	public static int[] expNeed = new int[] { 0, 200, 400, 600, 800, 1000,
			1400, 1800, 2200, 2600, 3000, 3700, 4400, 5100, 5800, 6500, 7500,
			8500, 9500, 10500, 11500, 12900, 14300, 15700, 17100, 18500, 20300,
			22100, 23900, 25700, 27500, 29800, 32100, 34400, 36700, 39000,
			39000, 39000, 39000 };

	// 武魂随机生成时，各星级产出，百分比数值，总和应该为100
	// 1星机率->pkMachineStarRate[0], 5星机率->pkMachineStarRate[4]
	public static double[] pkMachineStarRate = new double[] { 18.9, 40, 40, 1,
			0.1 };

	// 获得随机一个武魂
	public static MmochatSuperMachine getRandomPkMachine() {
		MmochatSuperMachine s = new MmochatSuperMachine(
				MmochatSuperMachineType.武魂);
		double rand = Math.random() * 100;// [0,100)
		int star = 1;
		double curRate = 0;
		for (int i = 0; i < 5; i++) {
			curRate += pkMachineStarRate[i];
			if (rand < curRate) {
				break;
			}
			star++;
		}
		s.setPkMachineStar(star);
		return s;
	}

	// 获取武魂石可能的基础属性列表
	public static List<MmochatEquipAttributeType> getPkStoneBaseAttrList() {
		List<MmochatEquipAttributeType> list = new ArrayList<MmochatEquipAttributeType>();
		list.add(MmochatEquipAttributeType.体质);
		list.add(MmochatEquipAttributeType.力量);
		list.add(MmochatEquipAttributeType.灵力);
		list.add(MmochatEquipAttributeType.敏捷);
		list.add(MmochatEquipAttributeType.抗雷);
		list.add(MmochatEquipAttributeType.抗水);
		list.add(MmochatEquipAttributeType.抗毒);
		list.add(MmochatEquipAttributeType.忽视抗雷);
		list.add(MmochatEquipAttributeType.忽视抗水);
		list.add(MmochatEquipAttributeType.忽视抗毒);
		return list;
	}

	// 获取武魂石随机一个基础属性
	public static MmochatEquipAttributeType getPkStoneRandBaseAttr() {
		List<MmochatEquipAttributeType> list = getPkStoneBaseAttrList();
		int index = MmochatUtil.getRandomValue(list.size());
		return list.get(index);
	}

	// 获取武魂石技能各等级对应的数值
	public static int getPkStoneBaseAttrValueByLevel(
			MmochatEquipAttributeType attrType, int stoneLevel) {
		return stoneLevel;
	}

	// 获取武魂石可能的技能列表
	public static List<MmochatEquipAttributeType> getPkStoneAttrList() {
		List<MmochatEquipAttributeType> list = new ArrayList<MmochatEquipAttributeType>();
		list.add(MmochatEquipAttributeType.无视伤害);
		list.add(MmochatEquipAttributeType.人物复活);
		list.add(MmochatEquipAttributeType.人物回血);
		list.add(MmochatEquipAttributeType.人物回蓝);
		list.add(MmochatEquipAttributeType.宠物回血);
		list.add(MmochatEquipAttributeType.宠物回蓝);
		list.add(MmochatEquipAttributeType.法术目标增加);
		list.add(MmochatEquipAttributeType.障碍目标增加);
		list.add(MmochatEquipAttributeType.辅助目标增加);
		list.add(MmochatEquipAttributeType.物伤高倍);
		list.add(MmochatEquipAttributeType.解除封印);
		list.add(MmochatEquipAttributeType.解除混乱);
		list.add(MmochatEquipAttributeType.解除冰冻);
		list.add(MmochatEquipAttributeType.气血加成);
		list.add(MmochatEquipAttributeType.法力加成);
		list.add(MmochatEquipAttributeType.速度加成);
		list.add(MmochatEquipAttributeType.体质);
		list.add(MmochatEquipAttributeType.力量);
		list.add(MmochatEquipAttributeType.灵力);
		list.add(MmochatEquipAttributeType.敏捷);
		list.add(MmochatEquipAttributeType.野蛮);
		list.add(MmochatEquipAttributeType.智慧);
		list.add(MmochatEquipAttributeType.坚韧);
		list.add(MmochatEquipAttributeType.活力);
		list.add(MmochatEquipAttributeType.灵巧);
		list.add(MmochatEquipAttributeType.抗雷);
		list.add(MmochatEquipAttributeType.抗水);
		list.add(MmochatEquipAttributeType.抗毒);
		list.add(MmochatEquipAttributeType.忽视抗雷);
		list.add(MmochatEquipAttributeType.忽视抗水);
		list.add(MmochatEquipAttributeType.忽视抗毒);
		list.add(MmochatEquipAttributeType.忽视封印抵抗);
		list.add(MmochatEquipAttributeType.忽视混乱抵抗);
		list.add(MmochatEquipAttributeType.忽视冰冻抵抗);
		list.add(MmochatEquipAttributeType.封印抵抗);
		list.add(MmochatEquipAttributeType.冰冻抵抗);
		list.add(MmochatEquipAttributeType.混乱抵抗);
		return list;
	}

	// 获取武魂石随机一个技能
	public static MmochatEquipAttributeType getPkStoneRandAttr() {
		List<MmochatEquipAttributeType> list = getPkStoneAttrList();
		int index = MmochatUtil.getRandomValue(list.size());
		return list.get(index);
	}

	// 获取武魂石技能各等级对应的数值
	public static int getPkStoneSkillValueByLevel(
			MmochatEquipAttributeType attrType, int stoneLevel) {
		if (stoneLevel < 1) {
			return 0;
		}
		if (stoneLevel > MmochatConstant.pkStoneMaxLevel) {
			stoneLevel = MmochatConstant.pkStoneMaxLevel;
		}

		int effectLevel = (stoneLevel - 1) / 5;// 0-7
		int levelBase1[] = { 1, 2, 4, 6, 9, 12, 16, 20 };
		int levelBase2[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
		int value = 0;
		int multiple = 1;

		switch (attrType) {
		case 无视伤害:
		case 人物复活:
		case 人物回血:
		case 人物回蓝:
		case 宠物回血:
		case 宠物回蓝:
		case 法术目标增加:
		case 解除封印:
		case 解除混乱:
		case 解除冰冻:
		case 气血加成:
		case 法力加成:
		case 速度加成:
		case 忽视封印抵抗:
		case 忽视混乱抵抗:
		case 忽视冰冻抵抗:
		case 封印抵抗:
		case 冰冻抵抗:
		case 混乱抵抗:
			value = levelBase1[effectLevel];
			multiple = 1;
			break;
		case 抗雷:
		case 抗水:
		case 抗毒:
		case 忽视抗雷:
		case 忽视抗水:
		case 忽视抗毒:
		case 障碍目标增加:
		case 体质:
		case 力量:
		case 灵力:
		case 敏捷:
			value = levelBase1[effectLevel];
			multiple = 2;
			break;
		case 辅助目标增加:
			value = levelBase1[effectLevel];
			multiple = 3;
			break;
		case 野蛮:
		case 智慧:
		case 坚韧:
		case 活力:
		case 灵巧:
			value = levelBase2[effectLevel];
			multiple = 1;
			break;
		case 物伤高倍:
			value = levelBase2[effectLevel];
			multiple = 2;
			break;
		default:
			multiple = 1;
			value = effectLevel;
			break;
		}

		value = value * multiple;

		return value;
	}

	// 获得武魂石升级所需灵气
	public static int getUplevelExpForPkStone(int curLevel) {
		if (curLevel >= MmochatConstant.pkStoneMaxLevel) {
			return 0;
		}

		return expNeed[curLevel];
	}

}
